package com.example.grpc.userpage;

import com.example.grpc.dto.UserDto;
import io.grpc.stub.StreamObserver;
import org.lognet.springboot.grpc.GRpcService;

import java.util.ArrayList;

@GRpcService
public class UserPageOperateImpl extends UserPagesGrpc.UserPagesImplBase {

    @Override
    public void list(UserPageRequest request, StreamObserver<UserPageResponse> responseObserver) {
        //根据名称获取参数
        String type = request.getType();
        //创建一个几个准备测试数据
        ArrayList<UserDto> users = new ArrayList<>();
        users.add(new UserDto(1, "zhangsan", "aaa@163.com"));
        users.add(new UserDto(2, "lisi", "bbb@163.com"));
        users.add(new UserDto(3, "wangwu", "ccc@163.com"));
        //构建Result.Builder对象
        Result.Builder result = Result.newBuilder();
        //使用UserList的构建器创建一个新的 UserList.Builder对象
        UserList.Builder userList = UserList.newBuilder();
        //list.forEach(c ->{...}); 遍历 list 列表，对每个元素执行 lambda 表达式中的代码块。
        users.forEach(
                c -> {
                    //创建一个新的 StoreSystemBean.Builder 对象，并设置其属性值，然后将其添加到 userList 中。
                    UserPage.Builder bean = UserPage.newBuilder()
                            .setId(c.getId())
                            .setName(c.getName())
                            .setEmail(c.getEmail());
                    userList.addUsers(bean);
                }
        );
        //设置userlist属性
        result.setUserList(userList);
        //设置total属性
        result.setTotal(users.size());
        //使用 StoreResponse 的构建器创建一个新的响应对象，并将其设置为包含 resList 的结果
        UserPageResponse response = UserPageResponse.newBuilder().setResult(result).build();
        //将响应对象返回给客户端。
        responseObserver.onNext(response);
        //通知客户端，该调用已完成。
        responseObserver.onCompleted();
    }
}